import pandas as pd
import numpy as np

# pandas分组
# 1. groupby()函数
# 2. .groups属性查看各行的分组情况

"""
数据聚合是数据处理的最后一步，通常是要使每个数组生成一个单一的数值
数据分类处理：
-- 分组：先把数据分为几组
-- 用函数处理：为不同组的数据应用不同的函数以转换数据
-- 合并：将不同组的数据合并成一个数组
数据分类处理的核心:groupby()
"""
df = pd.DataFrame(
    {
        'color': ['red', 'blue', 'green', 'yellow', 'yellow', 'red', 'red'],
        'price':[10, 20, 15, 10, 25, 12, 18]
    }
)
print(df)
print("\n")
print(df.groupby('color'))
print(df.groupby('color').groups)  # 按照color分组，并查看各行的分组情况

# 分组+聚合 统计
print(df.groupby('color').sum())
print('\n')
"""
菜品：萝卜，白菜，辣椒，冬瓜
颜色：白，青，红
重量：weight
价格：price

1.要求以属性作为列索引，新建一个ddd
2.对ddd进行聚合操作，求出颜色为白色的价格总和
3.对ddd进行聚合操作，分别求出萝卜的所有重量以及平均价格
4.使用merge合并总重量及平均价格
"""
# 1.要求以属性作为列索引，新建一个ddd
ddd = pd.DataFrame(
    data={
        'item' : ['萝卜', '白菜', '辣椒', '冬瓜', '萝卜', '白菜', '辣椒', '冬瓜'],
        'color' : ['白', '青', '红', '白', '白', '青', '红', '白'],
        'weight' : [10, 20, 30, 40, 50, 60, 70, 80],
        'price' : [10, 20, 15, 10, 25, 12, 18, 15]
    }
)
print(ddd)
# 2.对ddd进行聚合操作，求出颜色为白色的价格总和
print(ddd.groupby('color')['price'].sum()) # series
print(ddd.groupby('color')[['price']].sum()) # dataframe
print(ddd.groupby('color')[['price']].sum().loc[['白']])
# 3.对ddd进行聚合操作，分别求出萝卜的所有重量以及平均价格
df_weight = ddd.groupby('item')[['weight']].sum()
print(ddd.groupby('item')['weight'].sum().loc[['萝卜']])
df_price = ddd.groupby('item')[['price']].mean()
print(ddd.groupby('item')['price'].mean().loc[['萝卜']])
# 4.使用merge合并总重量及平均价格
print(df_weight.merge(df_price, left_index=True, right_index=True))
















